<?php
/**
 * Queue.php
 *
 * Author: netman
 * DateTime:  2023/7/14 16:30
 */

class Queue
{
    /**
     * @param string $queue 队列名称
     * @param $job 任务名称
     * @param $args 参数
     * @throws Kohana_Exception
     * User: netman
     * Date: 2023/7/14 16:36
     */
    public static function in(string $queue, $job, $args)
    {
		//判断队列状态是否开启
		$queue_status = Model_Sysconfig::get_configs(0, 'cfg_queue_status', true);
		if (!$queue_status)
		{
			throw new Exception("队列未开启,任务{$job}入队列失败");
		}

        $redis_backend = Kohana::$config->load('resque.redis_backend');
        Resque::setBackend($redis_backend);
		//入队列
		Resque_Event::listen('afterEnqueue', function($class, $arguments, $queue, $id){
            $job = DB::select()
                ->from('queue_job')
                ->where('token', '=', $id)
                ->execute()
                ->current();
            if(!$job)
            {
                //插入任务表
                $data = array(
                    'job_name'    => $class,
                    'queue_name'  => $queue,
                    'args'        => json_encode($arguments),
                    'token'       => $id,
                    'status'      => 1,
                    'create_time' => time(),
                );
                DB::insert('queue_job', array_keys($data))->values(array_values($data))->execute();
            }
		});
        Resque::enqueue($queue, $job, $args);

    }

	/**
	 * 删除队列任务
	 * @param $queue
	 * @param $class
	 * User: netman
	 * Date: 2023/7/19 13:51
	 */
	public static function del($queue, $class)
	{
		$redis_backend = Kohana::$config->load('resque.redis_backend');
		Resque::setBackend($redis_backend);
		Resque::dequeue($queue, [$class]);
	}

}